﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI.WebControls;
using vudu.ClasesDominio;
using vudu.Logica.Fachada;
using vudu.Presentacion.Contrato.VU_06_Gestionar_Profesores;

namespace vudu.Presentacion.Presentador.VU_06_Gestionar_Profesores
{
    public class PresentadorModificarPerfilProfesor
    {
        private IContratoModificarPerfilProfesor _vista;
        private EnlaceLogico _fachada2 = new EnlaceLogico();
        private EnlaceLogico _fachada = new EnlaceLogico();
        private String _mensajeExitoso = "Operación Exitosa, sus cambios se haran efectivos una vez que reinicie sesion.";
        private String _mensajeErrorBd = "Operación Fallida: Error en base de datos";
        private String _mensajeErrorDatos = "Operación Fallida: Error en datos Ingresados";
        private int _longitudTelefono = 7;
        private int _longitudCodigo = 4;
        private System.Drawing.Color _colorMensajeError = System.Drawing.Color.Red;
        private System.Drawing.Color _colorMensajeExitoso = System.Drawing.Color.Green;
        private System.Drawing.Color _colorLabelBase = System.Drawing.Color.Black;
        private String _classMensajeExitoso = "transaccionExitosa";
        private String _classMensajeError = "transaccionFallida";
        private Profesor prof;

        public PresentadorModificarPerfilProfesor(IContratoModificarPerfilProfesor vista, EnlaceLogico _fachada)
        {
            _vista = vista;
            prof = (Profesor) _fachada.RolActual;
        }

        public void MostrarDatos(Profesor profesor)
        {
            _vista.UsuarioProfesor.Text = "Profesor(a): " + prof.Nombre + " " + prof.Apellido;
            _vista.Nombre.Text = prof.Nombre;
            _vista.Apellido.Text = prof.Apellido;
            _vista.Email.Text = prof.Email;
            _vista.FechaNacimiento.Text = prof.FechaNacimiento.ToShortDateString();
            _vista.Sexo.SelectedValue = prof.Sexo;
            _vista.Codigo.Text = prof.Telefono.Substring(0, 4);
            _vista.Telefono.Text = prof.Telefono.Substring(4, 7);

        }

        public void ModificarPerfil()
        {
            Rol profesor = _fachada2.EnlaceCrearProfesor();
                if (ValidarFormulario())
                {
                    //Profesor profesor = new Profesor();
                    ((Profesor) profesor).Crn = prof.Crn;
                    ((Profesor) profesor).Nombre = _vista.Nombre.Text;
                    ((Profesor) profesor).Apellido = _vista.Apellido.Text;
                    ((Profesor) profesor).Email = _vista.Email.Text;
                    ((Profesor) profesor).Sexo = _vista.Sexo.Text;
                    ((Profesor) profesor).Telefono = _vista.Codigo.Text + _vista.Telefono.Text;
                    ((Profesor) profesor).FechaNacimiento = Convert.ToDateTime(_vista.FechaNacimiento.Text);

                     int x = _fachada.EnlaceLogicoModificarPerfilProfesor((Profesor) profesor);
                    _vista.AvisodeError.Text = _mensajeExitoso;
                    _vista.AvisodeError.ForeColor = _colorMensajeExitoso;
                    _vista.AvisodeError.Visible = true;
                }

                else
                {
                    _vista.AvisodeError.ForeColor = _colorMensajeError;
                    _vista.AvisodeError.Text = _mensajeErrorDatos;
                    _vista.AvisodeError.Visible = true;
                }
            

        }
        #region Funciones utilizadas para validar informacion del formulario

        /// <summary>
        /// Funcion que valida que la informacion del formulario este correcta
        /// </summary>
        /// <returns></returns>
        public bool ValidarFormulario()
        {
            bool respuesta = true;
            bool validaNombre = ValidarObligatorio(_vista.Nombre, _vista.lNombre);
            bool validaApellido = ValidarObligatorio(_vista.Apellido, _vista.lApellido);
            bool validaSexo = ValidarSexo(_vista.Sexo);
            bool validaTelefono = ValidarCampoTelefonoEscuela(_vista.Telefono, _vista.Codigo);
            bool validaEmail = ValidarObligatorio(_vista.Email, _vista.lEmail) && validarEmail(_vista.Email.Text);
            bool validaFechaNacimiento = ValidarObligatorio(_vista.FechaNacimiento, _vista.lFechaNacimiento) &&
                ValidarFechaNacimiento(_vista.FechaNacimiento.Text, _vista.lFechaNacimiento); 
            respuesta = validaNombre && validaApellido && validaTelefono && validaSexo && validaEmail
                && validaFechaNacimiento;

            return respuesta;
        }



        ///// Funcion que valida los campos obligatorios

        public bool ValidarObligatorio(TextBox textBoxAValidar, Label labelAActivar)
        {
            String campo = textBoxAValidar.Text;
            Regex regex = new Regex(@"(\s)");
            int espacios = regex.Matches(campo).Count;

            if (campo.Length == 0 || espacios == campo.Length)
            {
                CambiarLabel(labelAActivar, false);
                return false;
            }
            else
            {
                CambiarLabel(labelAActivar, true);
                return true;
            }
        }

        ///// <summary>
        ///// Funcion que cambiar los label segun la informacion de los textbox
        ///// </summary>
        ///// <param name="numero"></param>
        ///// <returns>retorna true si es, false caso contrario.</returns>
        public void CambiarLabel(Label aCambiar, bool validacion)
        {
            if (validacion)
            {
                aCambiar.ForeColor = _colorLabelBase;
            }
            else
            {
                aCambiar.ForeColor = _colorMensajeError;
            }
        }

        ///// <summary>
        ///// Funcion que valida si la informacion de Campo telefono y codigo es correcta.
        ///// </summary>
        ///// <param name="numero"></param>
        ///// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoTelefonoEscuela(TextBox telefono, TextBox codigo)
        {
            bool validacion = true;
            String _telefono = telefono.Text;
            String _codigo = codigo.Text;

            if ((_telefono.Length < _longitudTelefono) || (_codigo.Length < _longitudCodigo))
            {
                validacion = validacion && false;
            }


            if (validacion)
            {
                CambiarLabel(_vista.lTelefono, true);
                return true;
            }
            else
            {
                CambiarLabel(_vista.lTelefono, false);
                return false;
            }
        }


        //Validar que radionutton sexo este seleccionado

        public bool ValidarSexo(RadioButtonList sexo)
        {
            if (String.IsNullOrEmpty(sexo.SelectedValue))
            {
                CambiarLabel(_vista.lSexo, false);
                return false;
            }

            else
                CambiarLabel(_vista.lSexo, true);
            return true;
        }

        public bool validarEmail(string email)
        {
            string expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";

            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                {
                    CambiarLabel(_vista.lEmail, true);
                    return true;
                }
                else
                {
                    CambiarLabel(_vista.lEmail, false);
                    return false;
                }
            }
            else
            {
                CambiarLabel(_vista.lEmail, false);
                return false;
            }
        }

        
        public bool ValidarFechaNacimiento(string _fecha1, Label lvalidar1)
        {
            String fechaComparar = "01/01/2011";

            if (_fecha1 == "")

                return false;

            else
            {
                DateTime fecha1 = Convert.ToDateTime(_fecha1);
                DateTime fecha2 = Convert.ToDateTime(fechaComparar);

                if (fecha1 >= fecha2)
                {
                    CambiarLabel(lvalidar1, false);
                    return false;
                }

                else
                {
                    return true;
                }
            }


        }

        #endregion
        }
    }
